package com.ynkbny.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ynkbny.base.PageResult;
import com.ynkbny.domain.dto.TEpDataCollectConfigureDTO;
import com.ynkbny.domain.excel.DatacollectconfigureExportVO;
import com.ynkbny.domain.excel.TEpTotalEnergyExportVO;
import com.ynkbny.domain.pojo.EnterpriseGetNameVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
* @author YY
* @description 针对表【t_ep_datacollectconfigure(用能单位数据采集配置项信息)】的数据库操作Service
* @createDate 2023-07-05 17:56:35
*/
public interface TEpDataCollectConfigureService extends IService<TEpDataCollectConfigureDTO> {

    /**
     * 用能单位数据采集配置项信息列表
     * @param pageNum 页码
     * @param pageSize 单页数量
     * @param conditionJson 查询条件
     * @return IPage<TEpDataCollectConfigureDTO>
     */
    IPage<TEpDataCollectConfigureDTO> selectByPage(Long pageNum, Long pageSize, String conditionJson);

    /**
     *根据企业信用代码查询采集配置项列表
     * @param pageNum 页码
     * @param pageSize 单页数量
     * @param conditionJson 查询条件
     * @return
     */
    PageResult<TEpDataCollectConfigureDTO> getListByEnterpriseCode(Long pageNum, Long pageSize, String conditionJson);

    /**
     * 通过id查询 用能单位数据采集配置项信息
     * @param id id
     * @return TEpDataCollectConfigureDTO
     */
    TEpDataCollectConfigureDTO getOneById(String id);

    /**
     * 修改指定id的 用能单位数据采集配置项信息
     * @param tEpDataCollectConfigureDTO 实体类对象
     * @return boolean
     */
    boolean updateOneById(TEpDataCollectConfigureDTO tEpDataCollectConfigureDTO);

    /**
     * 用能单位数据采集配置项信息添加结果回写
     * @param tEpDataCollectConfigureList 要修改的实体集合
     * @return int
     */
    int updateDataCollectConfigure(List<TEpDataCollectConfigureDTO> tEpDataCollectConfigureList);

    /**
     * 通实体字段进行查询(and连接)
     * @param tEpDataCollectConfigureDTO 实体对象
     * @return List<TEpDataCollectConfigureDTO>
     */
    List<TEpDataCollectConfigureDTO> selectByEntityField(@Param("entity") TEpDataCollectConfigureDTO tEpDataCollectConfigureDTO);

    /**
     * 用能单位数据采集配置项信息 上报
     * @param tEpDatacollectconfigureDTO 用能单位数据采集配置项信息 对象
     * @return Res对象
     */
    boolean uploadOneById(TEpDataCollectConfigureDTO tEpDatacollectconfigureDTO);

    /**
     * 根据 1.社会信用 and 2.能源分类 + 分项 查询 属于此企业的List
     * @param enterpriseCode 社会信用
     * @param energyTypeCode 能源分类
     * @return list
     */
    List<TEpDataCollectConfigureDTO> getByEnterpriseCodeList(String enterpriseCode,String energyTypeCode);

    /**
     * 从老狗平台拉取采集配置项并更新或插入数据
     * @param proId 项目id，也是数据采集配置项的data_id
     * @return boolean
     */
    boolean saveOrUpdateBatchData(Integer proId);


    /**
     * excel导出 模板
     *
     * @author : juzipi123
     * @param enterpriseCode 统一社会信用代码
     * @return 导出文件
     */
    List<TEpTotalEnergyExportVO> exportExcelTemplate(String enterpriseCode);

    /**
     * excel导出 模板 V2
     *
     * @author : juzipi123
     * @param enterpriseCode 统一社会信用代码
     * @param statDate 数据统计时间
     * @param inputType 数据采集类型(1：管理信息系统 2：生产监控管理系统 3：分布式控制系统 4：现场仪表 5：手工填报 6：能源供应单位 7：其他)
     * @return 导出文件
     */
    List<DatacollectconfigureExportVO> exportExcelTemplateV2(String enterpriseCode, String statDate, String inputType);

    @Transactional(rollbackFor = {java.lang.Exception.class})
    void getDataForLaoGou(String token, EnterpriseGetNameVO enterpriseGetNameVO);

    /**
     * 上传数据
     *
     * @param enterpriseCode 社会信用代码
     * @param token  AK
     */
    void pushData(String enterpriseCode, String token);
}
